/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package parcview;

import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;
import parcview.interfaces.CarIF;

/**
 *
 * @author Malte
 */
public class ParcSimulationThreaded extends TimerTask{

    ArrayList<CarQueueDraw> toDraw;
    List<CarIF> baustellenList = new ArrayList<CarIF>();
    List<TrafficLightDraw> ampelList = new ArrayList<TrafficLightDraw>();
    parcview.interfaces.SimulationIF test;
    parcview.interfaces.ParkingLotIF parkplatz;
    parcview.interfaces.WaitingQueueIF einfahrt;
    parcview.interfaces.ConstructionIF baustelle;
    boolean ended = false;
    
    
    public ParcSimulationThreaded(ParcSimulation parc) {
        this.test = parc.test;
        this.toDraw = parc.toDraw;
        this.ampelList = parc.ampelList;
        parkplatz = test.getPARKING_LOT();
        einfahrt = test.getWAITING_QUEUE();
        baustelle = test.getCONSTRUCTION();
        
    }
    
    public void updateQueue(List<CarIF> a) {
        for(CarQueueDraw b : toDraw) {
            b.updateQueue(a);
        }
    }
    
    @Override
    public void run() {
        if(test.nextStep()) {

            for(TrafficLightDraw a : this.ampelList) {
                a.enable(true);
            }
            
            this.ampelList.get(0).setLight(this.baustelle.isToParkingLot());
            this.ampelList.get(1).setLight(!this.baustelle.isToParkingLot());

            toDraw.get(0).updateQueue(einfahrt.getWaitingCars());
            toDraw.get(1).updateQueue(parkplatz.getParkingCars());
            toDraw.get(2).updateQueue(parkplatz.getWaitingQueue().getWaitingCars());
            toDraw.get(3).updateQueue(baustelle.getCar());
        }
        else {
            for(TrafficLightDraw a : this.ampelList) {
                a.enable(false);
            }
            toDraw.get(0).updateQueue(einfahrt.getWaitingCars());
            toDraw.get(1).updateQueue(parkplatz.getParkingCars());
            toDraw.get(2).updateQueue(parkplatz.getWaitingQueue().getWaitingCars());
            toDraw.get(3).waitingCars.clear();
        }
    }

}
